package com.ccp.dev.qbdms.util;

import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.PdfWriter;

import java.io.FileOutputStream;
import java.io.IOException;

/**
 * Created by zzy on 2020/9/2.
 *
 * @Author 张朝阳
 * @Date 2020/9/2
 * @describe pdf工具类,用于生成pdf,使用itextpdf
 */
public class PdfUtils {

    /**
     * 将图片转成pdf,默认使用a4纸张,图片大小自适应
     * @author 张朝阳
     * @param source 源文件全名,包含路径
     * @param target 生成的pdf文件全名,包含路径
     */
    public static void image2Pdf(String source, String target){
        image2Pdf(source, target, PageSize.A4);
    }

    /**
     * 将图片转成pdf,可以指定纸张大小
     * @author 张朝阳
     * @param source 源文件全名,包含路径
     * @param target 生成的pdf文件全名,包含路径
     * @param pageSize 生成pdf的页大小
     */
    public static void image2Pdf(String source, String target,Rectangle pageSize) {
        Document document = new Document();
        //设置文档页边距
        document.setMargins(20,20,20,20);
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(target);
            PdfWriter.getInstance(document, fos);
            //打开文档
            document.open();
            //获取图片的宽高
            Image image = Image.getInstance(source);

            //2020/9/3 zzy 确认pdf尺寸根据图片大小变化,防止超长的字段溢出纸张大小而不显示.......
            // 章节缩进
            //int indentation = 0;
            //// 根据纸张计算缩放比
            //float scaler = ((document.getPageSize().getWidth() - document.leftMargin()
            //        - document.rightMargin() - indentation) / image.getWidth()) * 100;
            //// 比例缩放
            //image.scalePercent(scaler);

            float imageHeight=image.getScaledHeight();
            float imageWidth=image.getScaledWidth();
            //设置页面宽高与图片一致
            Rectangle rectangle = new Rectangle(imageWidth, imageHeight+20);
            document.setPageSize(rectangle);

            //图片居中
            image.setAlignment(Image.ALIGN_CENTER);
            //新建一页添加图片
            document.newPage();
            document.add(image);
        } catch (Exception ioe) {
            System.out.println(ioe.getMessage());
        } finally {
            //关闭文档
            document.close();
            try {
                fos.flush();
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
